The task of permitting applications or other software processes to exchange or share data on a live basis represents a long-standing challenge in the field of computing science. Word processing, networking, database or data mining and other applications or other processes may need to operate or most optimally operate on a common data set. For instance, customer resource management (CRM) platforms of a corporation, government or other organization may benefit from enabling transaction data to be updated and synchronized after a customer service representative has updated an account via a call center workstation. Data mining applications may benefit from dynamic linkage to sales data or supply chain packages. Other software systems may benefit from dynamic data linkage.
However, under most operating systems the memory space of various application processes may typically be isolated from, and not by themselves equipped to exchange data with, each other. Permitting individual processes to access, operate on and store common data while maintaining data coherency and avoiding memory contention and other problems may be a non-trivial task. A network or other facility deploying distributed or otherwise interacting software may nevertheless have to provide some mechanism to exchange data on a dynamic basis.
In certain known approaches, for instance the arrangement shown in FIG. 1, a fixed memory map may be configured to be shared by a set of processes, with variables from the various processes being mapped into that fixed space. Individual processes may then identify and operate on variables of interest. However, a static block approach may suffer from certain disadvantages. For one, the caching of any data or variable within a shared memory block can only be done by individual applications, increasing the coding complexity of those applications. Moreover, in network and other applications, the data being exchanged between various processes may differ widely in size, priority and other characteristics. For example, when a large number of processes attempt to access or manipulate another process, reliance upon a unified set of shared variables may prove inefficient or impossible. Timing, caching and other interactive complexities may degrade or overwhelm the system under such an approach as multiple processes contend for different variables or introduce dependencies or other problems.
Operating systems and other higher-level platforms have for their part afforded some solutions to the need for inter-process communication (IPC). For processes running under the Microsoft Windows™ NT, 2000 or related operating systems, for example, it is possible to open communication structures referred to as “pipes”, which permit a public channel for communication between processes. However, difficulties or limitations may remain. For example, such pipes created at the operating system level may not persist after the participating processes terminate. Moreover while such pipes permit data to be communicated between processes, the data transmitted via the pipe does not persist after it is sent. Maintaining a cache or other structure may therefore be difficult or impossible. Moreover, when using named pipes the bandwidth required to transmit a given set of data may scale linearly with the size of the data, which may degrade the performance of video, database or other bandwidth-dependent processes. Other problems exist.